import re
import json
from datetime import datetime
from typing import Optional, Dict, Any

def remove_fk_markup(text: str, markup_type='json') -> str:
    """
    从文本中提取JSON部分
    """
    # 首先尝试提取```json代码块中的内容
    if markup_type == 'json':
        data_match = re.search(r'```json\s*\n(.*?)\n```', text, re.DOTALL)
    elif markup_type == 'html':
        return text.replace('```html', '').replace('```', '').replace('当前时间',  datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    elif markup_type == 'markdown':
        return text.replace('```markdown', '').replace('```', '').replace('当前时间',  datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    else:
        raise ValueError(f"Unsupported markup type: {markup_type}")
    
    if data_match:
        data_str = data_match.group(1).strip()
        # 验证是否为有效JSON
        try:
            json.loads(data_str)
            return data_str
        except json.JSONDecodeError:
            pass
    
    # 如果没有代码块，尝试提取JSON对象
    if markup_type == 'json' and data_match is None:
        json_match = re.search(r'\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}', text, re.DOTALL)
        if json_match:
            json_str = json_match.group(0).strip()
            # 验证是否为有效JSON
            try:
                json.loads(json_str)
                return json_str
            except json.JSONDecodeError:
                pass
    
    # 如果都失败了，返回原文本
    return text


def generate_report_filename(query_params: Dict[str, Any], start_date: str, end_date: str) -> str:
    """
    根据查询参数生成报告文件名
    
    Args:
        query_params: 查询参数字典
        start_date: 开始日期 (YYYY-MM-DD)
        end_date: 结束日期 (YYYY-MM-DD)
    
    Returns:
        生成的文件名，格式：筛选条件+时间范围.html
    """
    # 构建筛选条件字符串
    conditions = []
    
    # 员工姓名
    if query_params.get('people_name'):
        conditions.append(f"员工_{query_params['people_name']}")
    
    # 部门名称
    if query_params.get('framework_name'):
        conditions.append(f"部门_{query_params['framework_name']}")
    
    # 项目ID
    if query_params.get('project_id'):
        conditions.append(f"项目_{query_params['project_id']}")
    
    # 如果没有具体筛选条件，使用"全部"
    if not conditions:
        conditions.append("全部")
    
    # 时间范围
    time_range = f"{start_date}_至_{end_date}"
    
    # 组合文件名
    filename = f"{'_'.join(conditions)}_{time_range}.html"
    
    # 清理文件名中的特殊字符（Windows文件名限制）
    filename = re.sub(r'[<>:"/\\|?*]', '_', filename)
    
    return filename


def markdown_to_html(markdown_content: str) -> str:
    """
    将Markdown内容转换为HTML
    
    Args:
        markdown_content: Markdown格式的内容
    
    Returns:
        HTML格式的内容
    """
    try:
        import mistune
        
        md = mistune.create_markdown(plugins=['table'])
        # 转换为HTML
        html_content = md(markdown_content)
        
        # 添加基本的HTML样式
        styled_html = f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>工时分析报告</title>
    <style>
        body {{
            font-family: 'Microsoft YaHei', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            line-height: 1.6;
            color: #333;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f8f9fa;
        }}
        .container {{
            background-color: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }}
        h1, h2, h3, h4, h5, h6 {{
            color: #2c3e50;
            margin-top: 30px;
            margin-bottom: 15px;
        }}
        h1 {{
            border-bottom: 3px solid #8B4513;
            padding-bottom: 10px;
        }}
        h2 {{
            border-bottom: 2px solid #A0522D;
            padding-bottom: 8px;
        }}
        h3 {{
            border-bottom: 1px solid #CD853F;
            padding-bottom: 5px;
        }}
        p {{
            margin-bottom: 15px;
        }}
        ul, ol {{
            margin-bottom: 15px;
            padding-left: 20px;
        }}
        li {{
            margin-bottom: 5px;
        }}
        code {{
            background-color: #f4f4f4;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
        }}
        pre {{
            background-color: #f8f8f8;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
            border-left: 4px solid #8B4513;
        }}
        blockquote {{
            border-left: 4px solid #8B4513;
            padding-left: 15px;
            margin-left: 0;
            color: #666;
            font-style: italic;
        }}
        table {{
            border-collapse: collapse;
            width: 100%;
            margin: 20px 0;
            font-size: 14px;
        }}
        th, td {{
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
            vertical-align: top;
        }}
        th {{
            background-color: #8B4513;
            color: white;
            font-weight: bold;
        }}
        tr:nth-child(even) {{
            background-color: #f9f9f9;
        }}
        tr:hover {{
            background-color: #f5f5f5;
        }}
        .highlight {{
            background-color: #fff3cd;
            padding: 10px;
            border-radius: 5px;
            border-left: 4px solid #ffc107;
        }}
        .footer {{
            margin-top: 40px;
            padding-top: 20px;
            border-top: 1px solid #ddd;
            text-align: center;
            color: #666;
            font-size: 0.9em;
        }}
    </style>
</head>
<body>
    <div class="container">
        {html_content}
        <div class="footer">
            <p>报告生成时间：{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
            <p>🐂 牛马工时日志汇报系统 | 基于AI驱动的智能分析</p>
        </div>
    </div>
</body>
</html>
        """
        
        return styled_html
        
    except ImportError:
        # 如果mistune未安装，返回简单的HTML包装
        return f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>工时分析报告</title>
    <style>
        body {{ font-family: Arial, sans-serif; margin: 40px; }}
        pre {{ white-space: pre-wrap; }}
        table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
        th, td {{ border: 1px solid #ddd; padding: 8px; text-align: left; }}
        th {{ background-color: #8B4513; color: white; }}
        tr:nth-child(even) {{ background-color: #f2f2f2; }}
    </style>
</head>
<body>
    <pre>{markdown_content}</pre>
    <p><em>报告生成时间：{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</em></p>
</body>
</html>
        """